#ifndef MUSICWIDGET_H
#define MUSICWIDGET_H

#include <QWidget>
#include <QLabel> // 显示标签
#include <QSlider> // 滑动条
#include <QPixmap>
#include <QPainter>
#include <QFrame> // 容器，可以设置各种显示效果
#include <QListWidget> // 列表组件（多行显示不同内容）
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QMessageBox> // 消息框
// 多媒体播放
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QPropertyAnimation>
// 文件操作相关
#include <QFile> // 单个文件类
#include <QFileDialog>
#include <QDir> // 目录类
#include <QUrl> // 统一资源类

#include "tcpserversingleton.h"

class MusicWidget : public QWidget
{
    Q_OBJECT
public:
    explicit MusicWidget(QWidget *parent = 0);

    QListWidget *list_widget; // 播放列表界面
    QMediaPlayer *player; // 播放器
    QMediaPlaylist *playlist; // 播放列表

    QLabel *current_label; // 当前时间
    QSlider *duration_slider; // 时长进度条
    QLabel *total_label; // 总时长

    QString currentLyric;
    QMap<int, QString> lyricMap; // 时间戳(ms) -> 歌词
    QLabel *lyricLabel; // 新增歌词显示控件

    QPushButton *last_btn;
    QPushButton *play_btn;
    QPushButton *next_btn;
    QSlider *volume_slider; // 音量滑动条
    QLabel *volume_label; // 音量大小

    tcpServerSingleton *tcpServer;

    void loadLyrics(const QString &filePath);
    void updateLyric(qint64 position);

    void paintEvent(QPaintEvent *e) override;

signals:
    void sig_send(const QString &send_data);

public slots:
    void slot_last_music();
    void slot_play_music();
    void slot_next_music();
};

#endif // MUSICWIDGET_H
